﻿#pragma once

#include <string>

#include "Room.h"

/**
* Zawiera elementy występujące na planszy
*/
namespace BoardItems
{
	enum PLAYER_PIECE_COLOUR { RED, GREEN, PURPLE, WHITE, YELLOW, BLUE }; /**< Możliwe kolory pionków */
	enum WEAPON_PIECE_TYPE { CANDLESTICK, DAGGER, LEAD_PIPE, REVOLVER, ROPE, SPANNER }; /**< Możliwe rodzaje broni */

	/**
	* Klasa bazowa reprezentująca pionek
	*/
	class Piece
	{
	public:
		Room* room; /**< Pokój, w którym aktualnie znajduje się pionek */
		Piece(void);
		virtual std::string getName() = 0; /**< Zwraca nazwę pionka */
	};

	class PlayerPiece: public Piece
	{
		PLAYER_PIECE_COLOUR colour; /**< Kolor pionka */

	public:
		/**
		* Inicjalizuje pionek odpowiednimi wartościami
		* @param colour Kolor pionka
		*/
		PlayerPiece(PLAYER_PIECE_COLOUR);
		std::string getName();
		/**
		* @return Kolor pionka
		*/
		PLAYER_PIECE_COLOUR getColour();
	};

	class WeaponPiece: public Piece
	{
		WEAPON_PIECE_TYPE type;

	public:
		/**
		* Inicjalizuje pionek odpowiednimi wartościami
		* @param type Rodzaj broni
		*/
		WeaponPiece(WEAPON_PIECE_TYPE);
		std::string getName();
		/**
		* @return Rodzaj broni
		*/
		WEAPON_PIECE_TYPE getType();
	};

}
